﻿/**
 *
 * @file   FITKCCXModelInforManager.h
 * @brief  calculix跟abaqus中对应关系映射表
 * @author XuChao (xxu715737@163.com)
 * @date   2024-05-24
 *
 */
#ifndef FITKCCXMODELINFORMANAGER_H
#define FITKCCXMODELINFORMANAGER_H
#include <QString>
#include <QMap>
#include <QPair>

namespace IO
{
    class FITKCCXModelInforManager
    {
    public:
        explicit FITKCCXModelInforManager();
        ~FITKCCXModelInforManager();

        /**
         * @brief  添加节点映射关系
         * @param  abaqusNodeInfoKey abaqus中node节点信息
         * @param  calculixIndexValue   对应calxulix中node节点的索引值
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        void addNodeMapping(const QPair<int, int> &abaqusNodeMappingKey, const int &calculixNodeMappingValue);

        /**
         * @brief  根据abaqus中node节点信息获取calculix中的节点映射关系
         * @param  abaqusNodeInfoKey abaqus中node节点信息
         * @return calxulix中node节点的索引值
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        int getNodeMappingValue(const QPair<int, int> &abaqusParentIDNodeID);

        /**
         * @brief   添加单元映射关系
         * @param  abaqusElementInfoKey
         * @param  calculixElementIndexValue
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        void addElementMapping(const QPair<int, int> &abaqusElementMappingKey, const int &calculixElementMappingValue);

        /**
         * @brief  根据abaqus中element单元信息获取calculix中的单元映射关系
         * @param  abaqusElementInfoKey abaques中的element单元信息
         * @return
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        int getElementMappingValue(const QPair<int, int> &abaqusElementMappingKey);

        /**
         * @brief  获取单元个数
         * @return int 单元个数
         * @author XuChao (xxu715737@163.com)
         * @date   2024-06-13
         */
        //int getElementSize();

        /**
         * @brief  添加集合映射关系
         * @param  abaqusSetInfoKey
         * @param  calculixSetInforValue
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        void addSetMapping(const QPair<int, int> &abaqusSetMappingKey, const QString &calculixSetMappingValue);

        /**
         * @brief  获取集合映射关系
         * @param  abaqusSetInfoKey
         * @return
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QString getSetMappingValue(const QPair<int, int> &abaqusSetMappingKey);

        /**
         * @brief  添加表面映射关系
         * @param  abaqusSurfaceInfoKey
         * @param  calculixSurfaceInforValue
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        void addSurfaceMapping(const QPair<int, int> &abaqusSurfaceMappingKey, const QString &calculixSurfaceMappingValue);

        /**
         * @brief  获取表面映射关系
         * @param  abaqusSurfaceInfoKey
         * @return
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QString getSurfaceMappingValue(const QPair<int, int> &abaqusSurfaceMappingKey);

    private:
        /**
         * @brief  abaqus与calculix节点映射关系
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QMap<QPair<int, int>, int> _ccxNodeMapping{};

        /**
         * @brief  abaqus与calculix单元映射关系
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QMap<QPair<int, int>, int> _ccxElementMapping{};

        /**
         * @brief  abaqus与calculix集合关系映射
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QMap<QPair<int, int>, QString> _ccxSetMapping{};

        /**
         * @brief  abaqus与calculix表面关系映射
         * @author XuChao (xxu715737@163.com)
         * @date   2024-05-28
         */
        QMap<QPair<int, int>, QString> _ccxSurfaceMapping{};
    };
}
#endif // !FITKCCXMODELINFORMANAGER_H